home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 421_01 / plasma.cpp < prev    next >
C/C++ Source or Header  |  1994-01-16  |  2KB  |  71 lines

  1. // PLASMA.CPP
  2.  
  3. // Thomas Hagen 1994
  4. // thomash@edb.tih.no
  5.  
  6. // This program creates the common plasma-effect. It could be vastly
  7. // improved upon by using tripple-buffering in mode-x, but I just don't feel
  8. // like doing it.
  9.  
  10. #include <dos.h>
  11. #include <stdio.h>
  12. #include <math.h>
  13. #include <conio.h>
  14. #include <stdlib.h>
  15. #include <alloc.h>
  16.  
  17. void main(void)
  18. {
  19.     randomize();
  20.     char *data=(char*)farmalloc(70000l);
  21.     if (!data)
  22.     {
  23.         printf("Not enough free memory.\n\n");
  24.     exit(1);
  25.     }
  26.     for (float x=0; x<256; x++)
  27.     for (float y=0; y<256; y++)
  28.         data[x+256*y]=83*(3+(cos(0.09*sqrt((x-128)*(x-128)+(y-128)*(y-128))))+
  29.         cos(x/21.0)+cos(y/26.0));
  30.     _AX=0x13;
  31.     asm int 0x10
  32.     outportb(0x3c8,0);
  33.     for (int r=0; r<256; r++)
  34.     {
  35.         outportb(0x3c9,(char)(sin(r*M_PI*2/64)*31.0+31));
  36.         outportb(0x3c9,(char)(sin(r*M_PI*2/128)*31.0+31));
  37.         outportb(0x3c9,(char)(sin(r*M_PI*2/256)*31.0+31));
  38.     }
  39.     for (float teller=0;teller<30000; teller++)
  40.     {
  41.         int pl1=48+cos(teller/37)*47.0+256*(int)(48+47*(sin(teller/31)));
  42.         int pl2=48+sin(teller/24)*47.0+256*(int)(48+47*(cos(teller/19)))-pl1;
  43.         _ES=0xa000;
  44.         asm xor di,di
  45.         asm push ds
  46.         asm lds si,data
  47.         asm add si,pl1
  48.         asm mov bx,pl2
  49.         asm pusha
  50.         asm mov cl,100
  51. l1: asm mov dx,160
  52. l2: asm lodsb
  53.         asm add al,[si+bx]
  54.         asm mov ah,al
  55.         asm mov es:[di+320],ax
  56.         asm stosw
  57.         asm dec dx
  58.         asm jnz l2
  59.         asm add si,256-160
  60.         asm add di,320
  61.         asm dec cl
  62.         asm jnz l1
  63.         asm popa
  64.         asm pop ds
  65.         if (kbhit())
  66.             teller=30000;
  67.     }
  68.     farfree(data);
  69.     _AX=3;
  70.     asm int 0x10
  71. }